{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "74009db4-368c-425f-85de-579545f7f969",
   "metadata": {},
   "source": [
    "Chapter 03\n",
    "\n",
    "# 高斯条件概率\n",
    "Book_7《机器学习》 | 鸢尾花书：从加减乘除到机器学习"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "3308805c-1a0d-4e6a-9d87-7c1f52dfb1fe",
   "metadata": {},
   "outputs": [],
   "source": [
    "# initializations\n",
    "import pandas as pd\n",
    "import pandas_datareader as web\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import scipy.stats as stats\n",
    "import yfinance as yf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "768a34b6-c3d1-4ecd-af88-ca36058a1b43",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[*********************100%%**********************]  13 of 13 completed\n"
     ]
    }
   ],
   "source": [
    "tickers = ['^GSPC','TSLA','WMT','MCD','USB',\n",
    "           'YUM','NFLX','JPM','PFE',\n",
    "           'F','GM','COST','JNJ'];\n",
    "\n",
    "stock_levels_df = yf.download(tickers, start='2020-07-01', end='2020-12-31')\n",
    "stock_levels_df.to_csv('stock_levels_df.csv')\n",
    "stock_levels_df.to_pickle('stock_levels_df.pkl')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "358a99bf-c8c7-4c9e-9f08-02eaec23068c",
   "metadata": {},
   "outputs": [],
   "source": [
    "y_X_df = stock_levels_df['Adj Close'].pct_change()\n",
    "y_X_df.dropna(inplace = True)\n",
    "\n",
    "y_X_df.rename(columns={\"^GSPC\": \"SP500\"},inplace = True)\n",
    "X_df_no_1 = y_X_df[tickers[1:]]\n",
    "y_df = y_X_df[['SP500']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "b46674ca-5c67-41d2-8457-e1329a553d60",
   "metadata": {},
   "outputs": [],
   "source": [
    "labels = ['SP500','TSLA','WMT','MCD','USB',\n",
    "           'YUM','NFLX','JPM','PFE',\n",
    "           'F','GM','COST','JNJ'];"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "8462172c-f91b-44ab-8a85-c3b80e56cc38",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                            OLS Regression Results                            \n",
      "==============================================================================\n",
      "Dep. Variable:                  SP500   R-squared:                       0.774\n",
      "Model:                            OLS   Adj. R-squared:                  0.750\n",
      "Method:                 Least Squares   F-statistic:                     32.24\n",
      "Date:                Tue, 21 Nov 2023   Prob (F-statistic):           5.73e-31\n",
      "Time:                        19:10:20   Log-Likelihood:                 489.68\n",
      "No. Observations:                 126   AIC:                            -953.4\n",
      "Df Residuals:                     113   BIC:                            -916.5\n",
      "Df Model:                          12                                         \n",
      "Covariance Type:            nonrobust                                         \n",
      "==============================================================================\n",
      "                 coef    std err          t      P>|t|      [0.025      0.975]\n",
      "------------------------------------------------------------------------------\n",
      "const         -0.0005      0.000     -0.974      0.332      -0.001       0.000\n",
      "TSLA           0.0242      0.011      2.186      0.031       0.002       0.046\n",
      "WMT            0.0268      0.041      0.654      0.514      -0.054       0.108\n",
      "MCD            0.1495      0.058      2.591      0.011       0.035       0.264\n",
      "USB            0.0160      0.051      0.313      0.754      -0.085       0.117\n",
      "YUM            0.1425      0.048      2.974      0.004       0.048       0.237\n",
      "NFLX           0.0986      0.022      4.562      0.000       0.056       0.141\n",
      "JPM            0.1445      0.055      2.618      0.010       0.035       0.254\n",
      "PFE            0.0550      0.033      1.671      0.098      -0.010       0.120\n",
      "F             -0.0084      0.036     -0.230      0.818      -0.080       0.064\n",
      "GM            -0.0110      0.027     -0.403      0.688      -0.065       0.043\n",
      "COST           0.2173      0.059      3.697      0.000       0.101       0.334\n",
      "JNJ            0.2435      0.056      4.366      0.000       0.133       0.354\n",
      "==============================================================================\n",
      "Omnibus:                        7.496   Durbin-Watson:                   1.866\n",
      "Prob(Omnibus):                  0.024   Jarque-Bera (JB):                8.449\n",
      "Skew:                           0.393   Prob(JB):                       0.0146\n",
      "Kurtosis:                       3.997   Cond. No.                         156.\n",
      "==============================================================================\n",
      "\n",
      "Notes:\n",
      "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n"
     ]
    }
   ],
   "source": [
    "#%% Regression\n",
    "\n",
    "import statsmodels.api as sm\n",
    "\n",
    "# add a column of ones\n",
    "X_df = sm.add_constant(X_df_no_1)\n",
    "\n",
    "\n",
    "model = sm.OLS(y_df, X_df)\n",
    "results = model.fit()\n",
    "print(results.summary())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "0cb7679f-e5a0-44b7-88b6-ba3efb5a517b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>const</th>\n",
       "      <th>TSLA</th>\n",
       "      <th>WMT</th>\n",
       "      <th>MCD</th>\n",
       "      <th>USB</th>\n",
       "      <th>YUM</th>\n",
       "      <th>NFLX</th>\n",
       "      <th>JPM</th>\n",
       "      <th>PFE</th>\n",
       "      <th>F</th>\n",
       "      <th>GM</th>\n",
       "      <th>COST</th>\n",
       "      <th>JNJ</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2020-07-02</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.079517</td>\n",
       "      <td>-0.004010</td>\n",
       "      <td>-0.006174</td>\n",
       "      <td>-0.002501</td>\n",
       "      <td>0.001272</td>\n",
       "      <td>-0.018017</td>\n",
       "      <td>0.003248</td>\n",
       "      <td>0.022822</td>\n",
       "      <td>0.011706</td>\n",
       "      <td>0.011218</td>\n",
       "      <td>0.003248</td>\n",
       "      <td>0.004203</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-07-06</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.134794</td>\n",
       "      <td>-0.002684</td>\n",
       "      <td>0.027136</td>\n",
       "      <td>0.026191</td>\n",
       "      <td>0.022528</td>\n",
       "      <td>0.035480</td>\n",
       "      <td>0.025253</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.023140</td>\n",
       "      <td>0.019414</td>\n",
       "      <td>0.018807</td>\n",
       "      <td>0.014258</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-07-07</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.013328</td>\n",
       "      <td>0.067794</td>\n",
       "      <td>-0.014218</td>\n",
       "      <td>-0.033939</td>\n",
       "      <td>-0.018642</td>\n",
       "      <td>-0.001316</td>\n",
       "      <td>-0.028211</td>\n",
       "      <td>-0.013909</td>\n",
       "      <td>-0.011308</td>\n",
       "      <td>-0.023319</td>\n",
       "      <td>0.015217</td>\n",
       "      <td>-0.000909</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-07-08</th>\n",
       "      <td>1.0</td>\n",
       "      <td>-0.017254</td>\n",
       "      <td>-0.019771</td>\n",
       "      <td>0.000162</td>\n",
       "      <td>-0.001968</td>\n",
       "      <td>-0.003569</td>\n",
       "      <td>0.019507</td>\n",
       "      <td>0.010615</td>\n",
       "      <td>-0.008228</td>\n",
       "      <td>-0.004902</td>\n",
       "      <td>-0.007561</td>\n",
       "      <td>0.000285</td>\n",
       "      <td>0.002940</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-07-09</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.020792</td>\n",
       "      <td>0.026599</td>\n",
       "      <td>-0.008179</td>\n",
       "      <td>-0.036328</td>\n",
       "      <td>-0.001964</td>\n",
       "      <td>0.009905</td>\n",
       "      <td>-0.021651</td>\n",
       "      <td>-0.008592</td>\n",
       "      <td>-0.041051</td>\n",
       "      <td>-0.060946</td>\n",
       "      <td>0.029148</td>\n",
       "      <td>-0.005444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-12-23</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.008808</td>\n",
       "      <td>-0.006796</td>\n",
       "      <td>0.000472</td>\n",
       "      <td>0.025005</td>\n",
       "      <td>-0.005680</td>\n",
       "      <td>-0.024368</td>\n",
       "      <td>0.027945</td>\n",
       "      <td>0.019053</td>\n",
       "      <td>0.022753</td>\n",
       "      <td>0.037897</td>\n",
       "      <td>-0.000387</td>\n",
       "      <td>-0.005107</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-12-24</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.024443</td>\n",
       "      <td>0.001955</td>\n",
       "      <td>-0.002972</td>\n",
       "      <td>-0.005136</td>\n",
       "      <td>0.007023</td>\n",
       "      <td>-0.000991</td>\n",
       "      <td>-0.004398</td>\n",
       "      <td>-0.004541</td>\n",
       "      <td>-0.014460</td>\n",
       "      <td>-0.020494</td>\n",
       "      <td>0.007433</td>\n",
       "      <td>0.003488</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-12-28</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.002901</td>\n",
       "      <td>0.011986</td>\n",
       "      <td>0.012441</td>\n",
       "      <td>0.003657</td>\n",
       "      <td>0.020830</td>\n",
       "      <td>0.010020</td>\n",
       "      <td>0.006585</td>\n",
       "      <td>-0.012074</td>\n",
       "      <td>0.003386</td>\n",
       "      <td>0.001924</td>\n",
       "      <td>0.017774</td>\n",
       "      <td>0.004722</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-12-29</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.003466</td>\n",
       "      <td>-0.006335</td>\n",
       "      <td>-0.006121</td>\n",
       "      <td>-0.011359</td>\n",
       "      <td>-0.003006</td>\n",
       "      <td>0.022634</td>\n",
       "      <td>-0.002633</td>\n",
       "      <td>0.006246</td>\n",
       "      <td>-0.007874</td>\n",
       "      <td>-0.002160</td>\n",
       "      <td>0.004474</td>\n",
       "      <td>0.006201</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-12-30</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.043229</td>\n",
       "      <td>-0.000831</td>\n",
       "      <td>-0.005406</td>\n",
       "      <td>0.009626</td>\n",
       "      <td>0.000548</td>\n",
       "      <td>-0.011830</td>\n",
       "      <td>0.002800</td>\n",
       "      <td>-0.008367</td>\n",
       "      <td>0.004535</td>\n",
       "      <td>0.006495</td>\n",
       "      <td>0.004641</td>\n",
       "      <td>0.012391</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>126 rows × 13 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            const      TSLA       WMT       MCD       USB       YUM      NFLX  \\\n",
       "Date                                                                            \n",
       "2020-07-02    1.0  0.079517 -0.004010 -0.006174 -0.002501  0.001272 -0.018017   \n",
       "2020-07-06    1.0  0.134794 -0.002684  0.027136  0.026191  0.022528  0.035480   \n",
       "2020-07-07    1.0  0.013328  0.067794 -0.014218 -0.033939 -0.018642 -0.001316   \n",
       "2020-07-08    1.0 -0.017254 -0.019771  0.000162 -0.001968 -0.003569  0.019507   \n",
       "2020-07-09    1.0  0.020792  0.026599 -0.008179 -0.036328 -0.001964  0.009905   \n",
       "...           ...       ...       ...       ...       ...       ...       ...   \n",
       "2020-12-23    1.0  0.008808 -0.006796  0.000472  0.025005 -0.005680 -0.024368   \n",
       "2020-12-24    1.0  0.024443  0.001955 -0.002972 -0.005136  0.007023 -0.000991   \n",
       "2020-12-28    1.0  0.002901  0.011986  0.012441  0.003657  0.020830  0.010020   \n",
       "2020-12-29    1.0  0.003466 -0.006335 -0.006121 -0.011359 -0.003006  0.022634   \n",
       "2020-12-30    1.0  0.043229 -0.000831 -0.005406  0.009626  0.000548 -0.011830   \n",
       "\n",
       "                 JPM       PFE         F        GM      COST       JNJ  \n",
       "Date                                                                    \n",
       "2020-07-02  0.003248  0.022822  0.011706  0.011218  0.003248  0.004203  \n",
       "2020-07-06  0.025253  0.000000  0.023140  0.019414  0.018807  0.014258  \n",
       "2020-07-07 -0.028211 -0.013909 -0.011308 -0.023319  0.015217 -0.000909  \n",
       "2020-07-08  0.010615 -0.008228 -0.004902 -0.007561  0.000285  0.002940  \n",
       "2020-07-09 -0.021651 -0.008592 -0.041051 -0.060946  0.029148 -0.005444  \n",
       "...              ...       ...       ...       ...       ...       ...  \n",
       "2020-12-23  0.027945  0.019053  0.022753  0.037897 -0.000387 -0.005107  \n",
       "2020-12-24 -0.004398 -0.004541 -0.014460 -0.020494  0.007433  0.003488  \n",
       "2020-12-28  0.006585 -0.012074  0.003386  0.001924  0.017774  0.004722  \n",
       "2020-12-29 -0.002633  0.006246 -0.007874 -0.002160  0.004474  0.006201  \n",
       "2020-12-30  0.002800 -0.008367  0.004535  0.006495  0.004641  0.012391  \n",
       "\n",
       "[126 rows x 13 columns]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "76731dd6-4d2e-420c-8f91-3d8d50fab9e5",
   "metadata": {},
   "outputs": [],
   "source": [
    "#%% Regression analysis\n",
    "\n",
    "y = np.array(y_df.values)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "9c8054ea-073c-468e-9934-80cff166bd4c",
   "metadata": {},
   "outputs": [],
   "source": [
    "X = X_df.values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "6f0d7514-8b0d-4ffc-9e53-0d9f1a0afd4f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.06616948,  0.01689638,  0.00424831, ..., -0.01416456,\n",
       "         0.00945222,  0.02562107],\n",
       "       [ 0.01689638,  0.11266485, -0.07320823, ...,  0.03354242,\n",
       "         0.0085799 ,  0.02510994],\n",
       "       [ 0.00424831, -0.07320823,  0.27363154, ..., -0.00122017,\n",
       "        -0.02100492,  0.01554477],\n",
       "       ...,\n",
       "       [-0.01416456,  0.03354242, -0.00122017, ...,  0.0542702 ,\n",
       "         0.00804621,  0.01110257],\n",
       "       [ 0.00945222,  0.0085799 , -0.02100492, ...,  0.00804621,\n",
       "         0.04054005,  0.00786251],\n",
       "       [ 0.02562107,  0.02510994,  0.01554477, ...,  0.01110257,\n",
       "         0.00786251,  0.06008219]])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X@np.linalg.inv(X.T@X)@X.T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "9ddd6807-06cd-4577-b9e4-b48f8b5b9b95",
   "metadata": {},
   "outputs": [],
   "source": [
    "H = X@np.linalg.inv(X.T@X)@X.T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "6ca591c5-9833-4f0e-8d9b-e569261e6f92",
   "metadata": {},
   "outputs": [],
   "source": [
    "# coefficients\n",
    "b = np.linalg.inv(X.T@X)@X.T@y\n",
    "\n",
    "y_hat = H@y\n",
    "e = y - y_hat"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "85cf9e40-dfc4-431b-89b5-6f19b0014778",
   "metadata": {},
   "outputs": [],
   "source": [
    "#%% Analysis of Variance\n",
    "\n",
    "n = y.shape[0]\n",
    "k = X.shape[1]\n",
    "D = k - 1\n",
    "\n",
    "I = np.identity(n)\n",
    "J = np.ones((n,n))\n",
    "vec_1 = np.ones_like(y)\n",
    "\n",
    "y_bar = vec_1.T@y/n\n",
    "\n",
    "# Sum of Squares for Total, SST\n",
    "SST = y.T@(I - J/n)@y\n",
    "MST = SST/(n - 1)\n",
    "MST = MST[0,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "fa9e3ba4-e628-4acf-abf7-03f063323256",
   "metadata": {},
   "outputs": [],
   "source": [
    "#%% Sum of Squares for Error, SSE\n",
    "\n",
    "SSE = y.T@(I - H)@y\n",
    "\n",
    "# mean squared error, MSE\n",
    "MSE = SSE/(n - k)\n",
    "MSE_ = e.T@e/(n - k)\n",
    "MSE = MSE[0,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "39854839-eb36-4048-95c4-c449981bff32",
   "metadata": {},
   "outputs": [],
   "source": [
    "#%% Sum of Squares for Regression, SSR\n",
    "\n",
    "SSR = y.T@(H - J/n)@y\n",
    "MSR = SSR/D\n",
    "MSR = MSR[0,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "df2be620-06a5-4e12-8c4b-a8c350cca4f4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "SST =  [[0.01374375]]\n",
      "SSR + SSE =  [[0.01374375]]\n",
      "================\n",
      "y.T@y =  [[0.01402271]]\n",
      "y_hat.T@y_hat + e.T@e =  [[0.01402271]]\n",
      "================\n",
      "e.T@vec_1 =  [[-1.10154941e-16]]\n",
      "================\n",
      "e.T@(y_hat - y_bar*vec_1) =  [[6.70003061e-19]]\n",
      "================\n",
      "e.T@(y - y_bar*vec_1) =  [[0.0031065]]\n",
      "================\n",
      "e.T@X =  [[-1.37910516e-16  8.89045781e-18  1.44334414e-18 -2.79859686e-18\n",
      "   8.37546178e-18 -3.15773883e-18 -3.63207728e-18  8.71935716e-18\n",
      "   2.48350060e-18 -9.21571847e-19 -8.71596903e-19 -3.88957529e-18\n",
      "   3.02221356e-18]]\n",
      "================\n",
      "e.T@X@b =  [[5.3139846e-19]]\n"
     ]
    }
   ],
   "source": [
    "#%% Orthogonal relationships\n",
    "\n",
    "print('SST = ',SST)\n",
    "print('SSR + SSE = ',SSR + SSE)\n",
    "\n",
    "print('================')\n",
    "print('y.T@y = ',y.T@y)\n",
    "print('y_hat.T@y_hat + e.T@e = ',y_hat.T@y_hat + e.T@e)\n",
    "\n",
    "print('================')\n",
    "print('e.T@vec_1 = ', e.T@vec_1)\n",
    "\n",
    "print('================')\n",
    "print('e.T@(y_hat - y_bar*vec_1) = ', e.T@(y_hat - y_bar))\n",
    "\n",
    "print('================')\n",
    "print('e.T@(y - y_bar*vec_1) = ', e.T@(y - y_bar))\n",
    "\n",
    "print('================')\n",
    "print('e.T@X = ', e.T@X)\n",
    "\n",
    "print('================')\n",
    "print('e.T@X@b = ', e.T@X@b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "c337a906-a370-4a5b-a02f-5d550b365649",
   "metadata": {},
   "outputs": [],
   "source": [
    "#%% R squared goodness of fit\n",
    "\n",
    "R_squared = SSR/SST\n",
    "R_sqaured_adj = 1 - MSE/MST"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "9f512a06-cf7e-40c3-8e94-2ff8a8d02483",
   "metadata": {},
   "outputs": [],
   "source": [
    "#%% F test\n",
    "\n",
    "F = MSR/MSE\n",
    "\n",
    "from scipy import stats\n",
    "p_value_F = 1.0 - stats.f.cdf(F,k - 1,n - k)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "4142dd8c-48c6-405a-a2be-a9763a4fa914",
   "metadata": {},
   "outputs": [],
   "source": [
    "#%% Log-likelihood\n",
    "\n",
    "sigma_MLE = np.sqrt(SSE/n)\n",
    "\n",
    "ln_L = -n*np.log(sigma_MLE*np.sqrt(2*np.pi)) - SSE/2/sigma_MLE**2\n",
    "\n",
    "AIC = 2*k - 2*ln_L\n",
    "BIC = k*np.log(n) - 2*ln_L"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "633169ac-b69e-4f98-a127-3c8d435ca1e5",
   "metadata": {},
   "outputs": [],
   "source": [
    "#%% t test\n",
    "\n",
    "C = MSE*np.linalg.inv(X.T@X)\n",
    "\n",
    "SE_b = np.sqrt(np.diag(C))\n",
    "SE_b = np.matrix(SE_b).T\n",
    "\n",
    "T = b/SE_b\n",
    "p_one_side = 1 - stats.t(n - k).cdf(np.abs(T))\n",
    "p = p_one_side*2\n",
    "# P > |t|"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "9969aeaa-809f-4626-9178-56497c11ba89",
   "metadata": {},
   "outputs": [],
   "source": [
    "#%% confidence interval of coefficients, 95%\n",
    "\n",
    "alpha = 0.05\n",
    "t = stats.t(n - k).ppf(1 - alpha/2)\n",
    "b_lower_CI = b - t*SE_b # 0.025\n",
    "b_upper_CI = b + t*SE_b # 0.975"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "da7757ac-e990-45c1-b12e-1403939b61fa",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Rank of X\n",
      "13\n",
      "det(X.T@X)\n",
      "1.959168566704102e-17\n"
     ]
    }
   ],
   "source": [
    "#%% multi-collinearity\n",
    "\n",
    "print('Rank of X')\n",
    "print(np.linalg.matrix_rank(X))\n",
    "\n",
    "print('det(X.T@X)')\n",
    "print(np.linalg.det(X.T@X))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "2695c964-73a8-4925-ac33-9a2d141391e0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "const    1.098670\n",
      "TSLA     1.434394\n",
      "WMT      1.560756\n",
      "MCD      1.756690\n",
      "USB      6.653828\n",
      "YUM      1.891891\n",
      "NFLX     1.593447\n",
      "JPM      6.267205\n",
      "PFE      1.511675\n",
      "F        2.935537\n",
      "GM       2.234937\n",
      "COST     2.237682\n",
      "JNJ      1.589850\n",
      "dtype: float64\n"
     ]
    }
   ],
   "source": [
    "from statsmodels.stats.outliers_influence import variance_inflation_factor as VIF\n",
    "\n",
    "VIF_X_df = pd.Series([VIF(X_df.values, i) \n",
    "                      for i in range(X_df.shape[1])], \n",
    "                      index=X_df.columns)\n",
    "\n",
    "print(VIF_X_no_1_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "ea450e0b-6768-4d7b-a852-f5c3438476c0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "TSLA    1.451021\n",
      "WMT     1.581416\n",
      "MCD     1.778057\n",
      "USB     6.713998\n",
      "YUM     1.933338\n",
      "NFLX    1.585564\n",
      "JPM     6.352675\n",
      "PFE     1.521270\n",
      "F       3.004005\n",
      "GM      2.275904\n",
      "COST    2.275805\n",
      "JNJ     1.601897\n",
      "dtype: float64\n"
     ]
    }
   ],
   "source": [
    "VIF_X_no_1_df = pd.Series([VIF(X_df_no_1.values, i) \n",
    "               for i in range(X_df_no_1.shape[1])], \n",
    "              index=X_df_no_1.columns)\n",
    "\n",
    "print(VIF_X_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "477113c3-98df-476d-8b1b-11f3614cb674",
   "metadata": {},
   "outputs": [],
   "source": [
    "#%% Conditional probability\n",
    "\n",
    "# covariance matrix\n",
    "SIGMA_df = y_X_df.cov()\n",
    "SIGMA = SIGMA_df.to_numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "4404b091-822c-400c-afb5-ce1dea05eceb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, '$\\\\Sigma$')"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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M6xatapUmU2bNsHV1RUqlQqurq5ISEjQuR4eHo5XXnkFlpaWaNCgAfr374+zZ8/qlBFFEXPmzIGDgwPMzc3h5eWFkydPVunZqkUCAgD29vZYtmwZLly4gPv37+P27ds4cOAApk6dqu3luHjxIqZMmVJuHTdv3kRwcLAyDSYioueCoZbhxsfHY8qUKZgxYwbS09PRvXt3+Pv7IzMzs8zyGRkZ6N27N7p374709HRMnz4d7777LjZt2qQtk5qaisDAQAQFBeHYsWMICgrCkCFDcODAAW2Z5ORkTJgwAfv370diYiIKCwvh4+OjM01i0aJFiIiIQFRUFA4dOgS1Wo1evXrh9u3blX6+apOAEBERVUeCkZEkR1VFRERg1KhRGD16NFq3bo3IyEg0btwYK1euLLP8qlWr0KRJE0RGRqJ169YYPXo0QkJCsHjxYm2ZyMhI9OrVCxqNBq1atYJGo0GPHj0QGRmpLbNt2zYEBwejTZs2eOmllxATE4PMzEykpaUBeNj7ERkZiRkzZuCNN95A27ZtERcXh7t37+L777+v9PMxASEiIlJAVbaCuH//PtLS0uDj46Nz3sfHBykpKWXek5qaWqq8r68vDh8+jAcPHugtU16dAJCbmwsAqFevHoCHPS3Z2dk69ahUKnh6euqt53FMQIiIiPSQahVMVbaCyMnJQVFREezs7HTO29nZITs7u8x7srOzyyxfWFiInJwcvWXKq1MURYSFheHVV19F27ZttXWU3FfZespSLVbBEBERVVdSbaOu0WgQFhamc66ilZmPb9IpimKpcxWVf/x8VeqcOHEijh8/jn379j112x7HBISIiEgBVdkKwtbWFsbGxqV6FK5evVqq56GEWq0us7yJiQnq16+vt0xZdU6aNAk//fQT9uzZg0aNGunEAR72hNjb21eqbWXhEAwREZEehlgFU6tWLbi5uSExMVHnfGJiIrp27VrmPV26dClVfseOHXB3d4epqaneMo/WKYoiJk6ciB9//BG7du2Ck5OTTnknJyeo1Wqdeu7fv4/k5ORy21YW9oAQERHp8SQrWKQQFhaGoKAguLu7o0uXLlizZg0yMzMRGhoK4OGQzt9//41169YBAEJDQxEVFYWwsDCMGTMGqampWLt2LdavX6+tc/LkyfDw8MDChQsREBCALVu2YOfOnTpDLBMmTMD333+PLVu2wNLS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wtLSUvtzVYdPvv/+ewiCgJycHJw5cwYdO3bUW76goAAFBQU651QqVZViEhER0dOTNSXz8PCAr68vpk+fXuZ1JycnODs7aw+jKrzy+MKFC/jwww8RFRWF4OBgBAcHl0ouHhceHg5ra2udIzw8vErPREREzxdRECQ5SJfsfUKfffYZfv75Z6SkpEhWZ3FxMUaOHAkvLy+MHDkSERERuHPnjt7hHgDQaDTIzc3VOTQajWTtIiKimkcUpTlIl+w7ob744osYOnToEy2PPXHihM4QDQC0b98eS5YswYkTJ3Dy5EkAgJWVFb7++mv06dMHb7zxRrlDMSqVikMuRERUJcXMHmShyFbsn3zyCX744Ycq3+fh4VHq3NmzZzFjxgx8/fXXsLe315738fHByJEjERwcjPT0dCYaRERE1ZjkCUhsbGypc46Ojrh37572Zy8vL4h6MsqKrt+9e7fM82vWrKl8Q4mIiCqB/R/y4MvoiIiI9ChmBiILLkwmIiIixbEHhIiISA99UwLoyTEBISIi0oNDMPLgEAwREREpjj0gREREerADRB5MQIiIiPTgEIw8OARDREREihNETu8lIiIq19XcPEnqaWBdR5J6agoOwRAREelRbOgG1FBMQADU9dH/Fl2p3NgxFwDgELhSkXj/xI8DADQaulaReADw13ejAAAN31JmW/y/148FADQJ/kaReACQGRsEQPnfG/NOExSJBwD5B5YDANxnb1ck3uG5vgCU++9Y8t/QEL83Nj0/ViTezZ2fAgDUA5coEg8AsjdNVjRmSTy5cZxAHpwDQkRERIpjDwgREZEeXAUjDyYgREREenCthjw4BENERESKYw8IERGRHlwFIw8mIERERHpwBEYeHIIhIiIixRksAQkODoYgCBAEAaampmjWrBmmTp2KvLw8XLx4UXvt0WPYsGEAUO51QRCwf/9+Qz0SERHVQMWiKMlBugw6BOPn54eYmBg8ePAAe/fuxejRo5GXl4dp06YBAHbu3Ik2bdpoy5ubm+vc//h1AKhfv778DScioucGUwd5GDQBUalUUKvVAIC3334bu3fvxubNm7UJSP369bXXy1LRdSIiIqqeqtUkVHNzczx48MDQzSAiItLiRmTyqDaTUA8ePIjvv/8ePXr00J7r2rUrLCwstEd6errOPY9ft7CwQFFRUbkxCgoKcOvWLZ2joKBAtmci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\n",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axs = plt.subplots()\n",
    "\n",
    "h = sns.heatmap(SIGMA_df,cmap='RdBu_r', linewidths=.05)\n",
    "h.set_aspect(\"equal\")\n",
    "h.set_title('$\\Sigma$')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "57640cc0-5ee9-4e5d-a6cd-b14684dc1256",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, '$\\\\Sigma_{XX}^{-1}$')"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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hlG7dm0jLi7ONe/JJ580xowZYzRr1sxYt26da/z+++83Bg4caBiGYdSrV8946qmnDLvdbnz//feuOY888ojx2GOPGb6+vkZycnKuHIYMGWL06NEj3/EWLVoYb7zxhmv8zTffNFq0aGH06NHDGDJkiGEYhtG1a1ejTp06rvyvdOXvoF69esYrr7ySa86zzz5rlCtXzjhw4ECudaGhocbYsWNzja9atcrIeUjecccdxuTJk3PNudZxbty40ZBk/Pzzz/lu53A4DG9vb+PQoUPG5cuXjbCwMNd+8nuMGIaR6/ctyXjmmWcMHx8f4/z5867xv/71r8a//vUvQ5KRmprqyvWBBx4wQkJCjCeeeCLPY77WY8yTx+Dq1auNihUrGl988YWxc+dOw8vLy/jggw/ynHvl7y+v3+Xw4cONgIAAwzAM4/Dhw67jbdy4sdu8W2+91XW8hw8fzje3q8X/c8yceLt3785z22utLyr5PZeKUnh4uFG3bt08n2uGYRiXL182DKPw54NrPZczMzMNf39/429/+1uu9e+9954hyVi+fLlhGJ6dK68kyVi1apVHc//8eLzW88UwPD8v48ZjVr2n1v+BWl86an1OXmbVe2r974q71htG2aj3paHWW/7KrycCAgKUkZGhjRs3Xtd+DMNQcnKyBg0apJCQEDVp0kRvvfWWpN9v/0lNTXXNTU1NVceOHRUaGuoa/+2337R161aFhYW55tWqVUvh4eFatGiRJOn8+fNasWKFYmJiCp3n0KFD3V5RSkpKctvfr7/+qrVr12rMmDF5vsKU361CVxo7dqwMw9Dq1asLlWNAQIA++eQTHT9+3ONtMjMz9eabbyo4OFj+/v75zhsyZIg6deqkoUOHKiEhQV999ZUWLFhQqDxbtWqlBg0aaOXKlZKkH374QRs3blRUVFSuueXLl9e0adM0a9YsHT16tFDxruXBBx9U//79NXjwYA0ePFhDhgxRt27dCrWvypUr6+LFi7n2f/LkSW3evFmStHnzZv3666+KjIy87tzzi2llJ06c0Mcff5zvc02S260/BT0fePJc/vjjj3XixIlcr/pLUmRkpJo0aaJly5ZJKrpzpSdK4vmCG09x13tqfcFQ6wunKGu9VPL1nlqf2/XUeqns1nszaj3Nr6Q+ffpowIABCg0NVWBgoHr16qWEhASdOXOmQPtZv369zp8/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\n",
      "text/plain": [
       "<Figure size 1200x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# blocks\n",
    "SIGMA_Xy = np.matrix(SIGMA[1:,0]).T\n",
    "SIGMA_XX = np.matrix(SIGMA[1:,1:])\n",
    "\n",
    "SIGMA_XX_inv = np.linalg.inv(SIGMA_XX)\n",
    "\n",
    "fig, axs = plt.subplots(1, 2, figsize=(12, 5))\n",
    "\n",
    "plt.sca(axs[0])\n",
    "ax = sns.heatmap(SIGMA_XX,cmap='RdBu_r', cbar=False, \n",
    "                 xticklabels = labels[1:],\n",
    "                 yticklabels = labels[1:], \n",
    "                 linewidths=.05)\n",
    "\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('$\\Sigma_{XX}$')\n",
    "\n",
    "plt.sca(axs[1])\n",
    "ax = sns.heatmap(SIGMA_XX_inv,cmap='RdBu_r', cbar=False,\n",
    "                 xticklabels = labels[1:],\n",
    "                 yticklabels = labels[1:], \n",
    "                 linewidths=.05)\n",
    "\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('$\\Sigma_{XX}^{-1}$')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "79f303e3-e411-48ab-889f-bffe306f7398",
   "metadata": {},
   "outputs": [],
   "source": [
    "# calculate coefficient vector, b\n",
    "\n",
    "b = SIGMA_XX_inv@SIGMA_Xy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "0a294668-b7dc-4c6f-b2ae-e7487794abf5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, '$\\\\Sigma_{Xy}$')"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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RFRVig+/bN++PTZs2IB3330XwL+HX65du1btMYsPv+ze/d93l4oPv3z06JHWYiciItIF5gHq0+kMGRFRTcfDL4mIiEibmJAREamJh18SERGRtuhsUw8iotqEh18SERGRNtSphKytqHbv0EJEulN8+GV8fLxWDr/86KOPFIdfrlmzpsI+UqkUixYtUioLDg4GLL0qFQsREVFt81bLhvoOoVxcskhEpKGKDr98mbqHX1ZEIpEgOztb6ZJIJJV7ICIiItK5OjVDti45rdJjTO/eotJjEFHt9fLhl126dFGUq3L45YABAzB//nyVD7/kEkUiIqKK3ZmnnfeyHb78WivjvKpOJWRERFWNh18SERGROrhkkYhIy3j4JREREalKINfwdDWxWIyYmBhIpVJ89NFHivLiF9zlcjkSExPh5VXyBfNPPvkEn3/+uaI+MzMTVlZWJdqNHj0aaWlpSEpKUizhef78Obp164a2bdtiy5YtasXMJYtERERERJqriTlAdV+yWKkZsvr162P58uXIzMwst921a9eQnp6uuF7+5pUnPDwcd+/exbJlyxRln332GTIyMrB27drKhE5ERERERBpgDqBdlXqHrF+/frh58yakUilCQkLKbNe4ceNSs9+KNGzYEBs3bsTIkSMxaNAgPH/+HFKpFHv27IG1tXUlIiciqp38t5xWue3X419sOjI88qRa99gZ2A0AMGfPbyr3+WpIOwDAf/deUrlPyCBXAID427NqRAdEj+sEAFh84JrKfRa8/WKzlUlx59S6V8SYjgDU+wyLP79BG0+o3Gfv1B5q3+fle03dfl7lPhtHuQEA2s37QeU+v335jjphEVENxxxAuyo1Q2ZoaIilS5di7dq1+OOPP7QVk5LBgwdjzJgxmDBhAiZMmICJEydiwIABVXIvIqKXicViCAQCpb/QAS+WZQgEAgBAYmIiBAJBiet///ufUn1WVlap9xg9ejS6deumtE3+8+fP0alTJ4wfP75qHoyIiKgSmANoV6U39Rg2bBjc3NxeHEhaBjs7O5iZmSmuhw8fqnWP1atX4/r163j48CG++uqrCtvLZDLk5OQoXTKZTK17EhEBXJZBRERUGuYA2qOVXRaXL1+OmJgYXL58udT6o0eP4vz584pL3anGb7/9FgKBAP/88w+uXr1aYXupVApLS0ulSyqVqnVPIiLgxbIMkUhU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\n",
      "text/plain": [
       "<Figure size 1200x300 with 5 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axs = plt.subplots(1, 5, figsize=(12, 3))\n",
    "\n",
    "plt.sca(axs[0])\n",
    "ax = sns.heatmap(b,cmap='RdBu_r', cbar=False,\n",
    "                 yticklabels = labels[1:], \n",
    "                 linewidths=.05)\n",
    "\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('$b$')\n",
    "\n",
    "plt.sca(axs[1])\n",
    "plt.title('=')\n",
    "plt.axis('off')\n",
    "\n",
    "plt.sca(axs[2])\n",
    "ax = sns.heatmap(SIGMA_XX_inv,cmap='RdBu_r', cbar=False,\n",
    "                 xticklabels = labels[1:],\n",
    "                 yticklabels = labels[1:], \n",
    "                 linewidths=.05)\n",
    "\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('$\\Sigma_{XX}^{-1}$')\n",
    "\n",
    "plt.sca(axs[3])\n",
    "plt.title('@')\n",
    "plt.axis('off')\n",
    "\n",
    "plt.sca(axs[4])\n",
    "ax = sns.heatmap(SIGMA_Xy,cmap='RdBu_r', cbar=False,\n",
    "                 xticklabels = [labels[0]],\n",
    "                 yticklabels = labels[1:], \n",
    "                 linewidths=.05)\n",
    "\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('$\\Sigma_{Xy}$')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "e0370616-7d5d-430b-9d0e-4c7d051ab91a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, '$b$')"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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llVM8+Lj46P169fr4sWLOnbsmKQbi+bc3LB+yZIl+s9//pOjKJSknj17atq0aZo5cyaFIVAKbB3tKw4UhgAAoMx58MEH891L75dfflGtWrUsC88kJCRo1KhRysjIUN26dS1FYkhIiGrXrm215UR+YmLynjY9ZMgQnT9/XvPmzdOff/6p999/X9WqVSvU893J5vBffvmlnnjiCZUvX96qvaBVTAtStWpVBQUF5Wg/evRorisq3tSpUyeNHj260PcFUDZRGAIAgDLnX//6l7p165bnXnpr1qxRu3bt9Nhjj+mxxx7Tm2++qevXr2v79u1KSEhQQkKCli9fLpPJJF9fXx09elT16tVTixYtirRi4L///W/973//U0pKipo2bar3339fPXv2zDXWYDDo8uXLqlChgmU7ifT09Bz7G966b2Ju2rVrJ0kKDw+32gA7v1VMi6JixYpKTU1V3bp1cz1/6dIlVaxYscj3AVCw4lijwdZ1AigMAQBAmRMSEqJdu3bluZdeYGBgjtGucuXKqX379mrVqpXatm2rr7/+Wh988IGOHTumF198UStWrNCvv/6qiIgIDRw40DJ18k5cu3ZNrq6u2rRpk6Kjo/X000+rcePGVttqSNLu3btlNputNpM3m81q0aKF1Wdb9h708PBQeHh4jvb8VjEtirZt22r+/PmaP39+rufnzp2rtm3blsi9AdgPhSEAAChzIiIiNGvWLL388su5nr91L72MjAxt27ZN8fHxSkhIUGJionx8fBQcHKz58+crODhYtWvX1nvvvafVq1crJiZGkZGR6t69u4YNG6YuXbrYvMLmBx98oBYtWujkyZP69NNPVbVqVfXq1StHYShJ8fHxhXv4XNzJ1NOieuONN9ShQwdduHBBY8eOtaxK+tNPP2n69On67LPPivXZAJQNbFfhIFhqHvbG98fdje8QlDZnZ2clJyerevXq+cYFBwcrMTFRDRs2VPv27RUcHKzg4OACt504efKklixZoqVLl+r69es6dOiQ3Nzc9Nprr+Uan5aWpqSkJP3yyy969dVXNWvWLHXq1EkLFy7U/fffX+jnLKvWrFmj4cOH6+LFi1btnp6eWrhwoZ5++mk7ZQbcHcLDwxUXF5ej/ejRozavpCwxlRQAADg4W/9uvW3bNtWsWVMhISHq0KGD2rdvb9Om7waDQQaDQWazWdnZ2Zb2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\n",
      "text/plain": [
       "<Figure size 1200x300 with 7 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#%% calculate coefficient, b0\n",
    "\n",
    "MU = y_X_df.mean()\n",
    "MU = np.matrix(MU.to_numpy())\n",
    "\n",
    "b0 = MU[0,0] - MU[0,1:]@b\n",
    "\n",
    "fig, axs = plt.subplots(1, 7, figsize=(12, 3))\n",
    "\n",
    "plt.sca(axs[0])\n",
    "ax = sns.heatmap(b0,cmap='RdBu_r', cbar=False, \n",
    "                 linewidths=.05,xticklabels = [],\n",
    "                 yticklabels = [])\n",
    "\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('$b_0$')\n",
    "\n",
    "plt.sca(axs[1])\n",
    "plt.title('=')\n",
    "plt.axis('off')\n",
    "\n",
    "plt.sca(axs[2])\n",
    "ax = sns.heatmap(np.matrix(MU[0,0]),cmap='RdBu_r', cbar=False,\n",
    "                 linewidths=.05, xticklabels = [],\n",
    "                 yticklabels = [])\n",
    "\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('$\\mu_{y}$')\n",
    "\n",
    "plt.sca(axs[3])\n",
    "plt.title('-')\n",
    "plt.axis('off')\n",
    "\n",
    "plt.sca(axs[4])\n",
    "ax = sns.heatmap(MU[0,1:],cmap='RdBu_r', cbar=False,\n",
    "                 xticklabels = labels[1:], yticklabels = [],\n",
    "                 linewidths=.05)\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('$\\mu_{X}$')\n",
    "\n",
    "\n",
    "plt.sca(axs[5])\n",
    "plt.title('@')\n",
    "plt.axis('off')\n",
    "\n",
    "plt.sca(axs[6])\n",
    "ax = sns.heatmap(b,cmap='RdBu_r', cbar=False,\n",
    "                 yticklabels = labels[1:], xticklabels = [],\n",
    "                 linewidths=.05)\n",
    "\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('$b$')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
